using System.Activities.Presentation;
using System.Collections.Generic;
using Headsight.BPMN2WF.BPMN.Model;

namespace Headsight.BPMN2WF.Transformation
{
    /// <summary>
    /// <i>BPMN2WF context</i> passed around by <see cref="BPMN2WFImpl"/> to registered <see cref="IBPMN2WFTransformation"/>
    /// instances for the creation of the respective <i>WF Activity ModelItem instances</i>.
    /// </summary>
    public interface IBPMN2WFTransformationContext
    {
        /// <summary>
        /// The <see cref="WorkflowDesigner"/> the transformed WF model is (finally) built with.
        /// </summary>
        WorkflowDesigner WorkflowDesigner { get; }

        /// <summary>
        /// The to be transformed <i>BPMN process</i>.
        /// </summary>
        BPMNFlowNodesBlock BPMNProcess { get; }

        /// <summary>
        /// The <see cref="IBPMN2WFTransformations"/> responsible for the transformation 
        /// of low level BPMN artifacts as well as higher-level BPMN block level structures.
        /// </summary>
        IBPMN2WFTransformations BPMN2WFTransformations { get; }

        /// <summary>
        /// <see cref="IDictionary{TKey,TValue}"/> of all so far into WF transformed
        /// BPMN artifacts and structures of the respective <see cref="IBPMN2WFTransformation"/>s of 
        /// <see cref="IBPMN2WFTransformations"/>.
        /// </summary>
        IDictionary<BPMNFlowNode, BPMNTransformationResult> BPMNTransformationResults { get; }
    }
}